﻿using System;
using System.Collections.Generic;
using Informant.Engines.Authentication;
using Informant.SmsMessaging;

namespace Informant.Engines.SmsMessaging
{
	public interface ISmsEngine : IAuthenticationEngine
	{
		/// <summary>
		/// Deletes the Sms.
		/// </summary>
		/// <param name="smsId">The Sms id.</param>
		/// <returns>True if successful.</returns>
		/// <exception cref="Informant.Authentication.AuthenticationException"/>
		/// <exception cref="System.Net.WebException"/>
		Boolean DeleteSms(String smsId);
		/// <summary>
		/// Marks the target Sms as read.
		/// </summary>
		/// <param name="smsId">The Sms id.</param>
		/// <param name="isRead">if set to <c>true</c> [is read].</param>
		/// <returns>True if successful.</returns>
		/// <exception cref="Informant.Authentication.AuthenticationException"/>
		/// <exception cref="System.Net.WebException"/>
		Boolean MarkReadSms(String smsId, Boolean isRead);
		/// <summary>
		/// Retrives all Sms.
		/// </summary>
		/// <returns></returns>
		/// <exception cref="Informant.Authentication.AuthenticationException"/>
		/// <exception cref="System.Net.WebException"/>
		IEnumerable<ISms> RetrieveAllSms();
		/// <summary>
		/// Sends an Sms.
		/// </summary>
		/// <param name="sms">The SMS.</param>
		/// <returns>
		/// Enumeration of all Phone that sms send failed for.
		/// </returns>
		/// <exception cref="Informant.Authentication.AuthenticationException"/>
		/// <exception cref="System.Net.WebException"/>
		/// <exception cref="Informant.ErrorHandling.SmsException"/>
		Boolean SendSms(ISms sms);
		/// <summary>
		/// Occurs when send SMS progress updated.
		/// </summary>
		event EventHandler<SendSmsProgressEventArgs> SendSmsProgressUpdated;

	}
}
